BOOL CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
HWND hWnddlg = AfxGetMainWnd()->m_hWnd; //主窗口句柄
HWND hwnd2=::GetDlgItem(hWnddlg,IDC_BUTTON1);//子窗口(或控件)句柄
::SendMessage(hwnd2,WM_LBUTTONDOWN,0,0);
::SendMessage(hwnd2,WM_LBUTTONUP,0,0);
……
}
//需要先打开记事本
int main()
{
HWND hWnd = ::FindWindowW(L"Notepad",NULL); //搜索记事本程序主窗口句柄
HWND hWndc = ::GetWindow(hWnd,GW_CHILD); //获得记事本客户区句柄(该窗口是记事本主窗口的子窗口,即那个白色的可编辑区域) 。
if(hWndc) //如果获得了该句柄
::SendMessage(hWndc,WM_CHAR,'A',NULL);//发送按键消息
system("pause");
return 0;
}
建立了一个tab控件 添加了5个标签页
每个标签页添加一个child对话框
每个对话框添加一个类dlg1至dlg5
程序中的非对话框类 会向某个对话框发送消息
怎么才能获得child对话框的句柄呢?
有人说 创建的时候把句柄保存下来 我是新手 请问用什么语句保存?
CDialog::Create创建成功了.HWND hwnd=dlg1.m_hwnd;这个就是窗口的句柄了.
亲谢谢你 成功了 解决了我很大的困扰 我设置全局变量保存句柄了。
你m_tabPage1.Create()完成以后,直接调用m_tabPage1.GetSafeHwnd()传递给m_SerialPort.InitPort(...);函数不就行了吗?如果需要port将消息发送到m_tabPage1和m_tabPage2的话,可以直接传递主窗口的HWND,port先发消息到主窗口,主窗口再中转消息到page1和page2。
按你说的方法成功了,谢谢!我还是基础太差了
1. 在对话框·Dlg.cpp文件顶部定义窗口句柄全局变量
HWND m_ShowHistoryDlgWnd ;
2. 在对话框初始化函数,添加句柄获得
BOOL CShowHistoryDlg::OnInitDialog()
{
……
m_ShowHistoryDlgWnd = this->m_hWnd ;
……
}
3. 在引用的.cpp的文件顶部定义引用
extern HWND m_ShowHistoryDlgWnd;
4. 可以在该文件中直接引用即可